// 模拟java 中的数据结构
package collections

import "errors"

type Stack struct {
	data []interface{}
}

func (s *Stack) Push(data interface{}) error {
	if s.data == nil || len(s.data) == 0 {
		s.data = make([]interface{}, 0)
	}
	s.data = append(s.data, data)
	return nil
}

func (s *Stack) Pop() (interface{}, error) {
	if s.data == nil || len(s.data) <= 0 {
		return nil, errors.New("stack is empty")
	}

	l := len(s.data) - 1
	res := s.data[l]    // 取最后一个元素
	s.data[l] = nil     // 删除最后一个元素
	s.data = s.data[:l] // 重置切片
	return res, nil
}

func (s *Stack) Contains(o interface{}) bool {
	d := s.data
	if d == nil || len(d) == 0 {
		return false
	}

	for _, v := range d {
		if v == o {
			return true
		}
	}
	return false
}
